//package com.el.logger;
//
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.LinkedBlockingQueue;
//
//public abstract class Log {
//
//    private static final int BUFFER_MAX_SIZE = 1000;
//    
//    private BlockingQueue<EventLogEntry> logBuffer;
//    private LogFormatter logFormatter;
//    
//    private String loggerName = "GENERIC";
//    private Thread worker;
//
//    public Log() {
//        logBuffer = new LinkedBlockingQueue<EventLogEntry>(BUFFER_MAX_SIZE);
//        
//        worker = new Thread(new Runnable(){
//
//            public void run() {
//                try {
//                    while (true) {
//                        logExternal(getLogFormatter().format(logBuffer.take()));
//                    }
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//            
//        });
//        worker.setName("EVENT_LOGGER:"+getLoggerName());
//        worker.setDaemon(true);
//        
//        init();
//    }
//    
//    protected void start() {
//        worker.start();
//    }
//
//    /**
//     * non blocking, separate thread
//     */
//    public void addEntryToLoggingQueue(EventLogEntry entry) {
//        try {
//            logBuffer.add(entry);
//        } catch (IllegalStateException exc) {
//            System.out.println("Exceeded eventLog buffer size");
//        }
//    }
//
//    protected abstract void logExternal(String logEntry);
//    protected abstract void init() throws Exception;
//    protected abstract void shutdown() throws Exception;
//    
//    
//    protected String getLoggerName() {
//        return this.loggerName;
//    }
//
//    public void setLogFormatter(LogFormatter logFormatter) {
//        this.logFormatter = logFormatter;
//    }
//
//    public LogFormatter getLogFormatter() {
//        return logFormatter;
//    }
//    
//    public void finalize() {
//        shutdown();
//    }
//
//}
